// import _ from 'lodash'

// /**
//  * 消息模型
//  */
// export interface IMessage {
//   type: MessageTypes
// }

// /**
//  * 消息类型
//  */
// export enum MessageTypes {
//   /**
//    * 刷新token
//    */
//   RefreshToken = 'ReFreshAuth',
//   /** 
//    * 获取token、权限等信息 
//    */
//   GetLoginInfo = 'LoginInfo',
//   /**
//    * 获取原始的token、权限等信息（和上面的数据结构不一样）
//    */
//   GetOriginLoginInfo = 'OriginLoginInfo',
//   /**
//    * 退出登录
//    */
//   LoginOut = 'LoginOut',
//   /**
//    * 子系统url地址发生改变
//    */
//   ChangeUrl = 'ChangeUrl'
// }

// /**
//  * 管理中心 - 子系统客户端
//  */
// class ManageCenterClient {

//   private listens: IListen = {}
//   public centerUrl: string = ''

//   constructor() {
    
//     window.addEventListener('message', this.messageHandler)
//     window.onhashchange = (e: HashChangeEvent) => {
//       const hash = window.location.hash;
//       if (hash !== '#/') {
//         const message = { type: MessageTypes.ChangeUrl, data: window.location.href }
//         this.sendMessageToCenter(message)
//       }
//     }
//   }

//   public sendMessage(message: IMessage, callback: (data: any) => void): void {
//     if (!_.isFunction(callback)) {
//       throw new Error('callback 必须是一个方法')
//     }
//     this.listens[message.type] = callback
//     this.sendMessageToCenter(message)
//   }

//   public refreshToken(): void {
//     this.sendMessage({ type: MessageTypes.RefreshToken }, (res) => {
//       const auth = sessionStorage.getItem('userAuth')
//       if (auth) {
//         const authObj = JSON.parse(auth)
//         authObj.Authorization = res
//         sessionStorage.setItem('userAuth', JSON.stringify(authObj))
//       }
//       sessionStorage.setItem('token', res.accessToken)
//     })
//   }

//   private messageHandler = (e: MessageEvent) => {
//     const message = e.data
//     const origin = e.origin || (e as any).originalEvent.origin
//     if (origin === this.centerUrl) {
//       if (this.listens[message.type]) {
//         this.listens[message.type](message.data)
//         delete this.listens[message.type]
//       }
//     } else {
//       console.warn(`message origin：${origin}和center url：${this.centerUrl} 不一致`)
//     }
//   }

//   private sendMessageToCenter(message: any) {
//     window.parent.postMessage(message, this.centerUrl)
//   }

// }

// interface IListen {
//   [type: string]: (data: any) => void
// }

// export default ManageCenterClient
